/*
 * Copyright (c) 2024. hallele, Inc All rights reserved.
 */

package cn.hallele.infrastructure.util.bean;

import org.dromara.hutool.crypto.SecureUtil;

import java.util.Base64;

/**
 * AES加解密
 *
 * @author anle5
 * @since 2024/9/15 12:38
 */
public class AES {
    private final org.dromara.hutool.crypto.symmetric.AES aes;

    /**
     * AES加密
     *
     * @param key 密钥
     */
    public AES(String key) {
        this.aes = SecureUtil.aes(Base64.getDecoder().decode(key));
    }

    /**
     * 加密，使用UTF-8编码
     *
     * @param plainText 被加密的字符串
     * @return 加密后的Hex
     */
    public String encryptHex(String plainText) {
        return this.aes.encryptHex(plainText);
    }

    /**
     * 加密，使用UTF-8编码
     *
     * @param plainText 被加密的字符串
     * @return 加密后的bytes
     */
    public byte[] encrypt(String plainText) {
        return this.aes.encrypt(plainText);
    }

    /**
     * 加密，使用UTF-8编码
     *
     * @param plainText 被加密的字符串
     * @return 加密后的Base64
     */
    public String encryptBase64(String plainText) {
        return this.aes.encryptBase64(plainText);
    }

    /**
     * 解密Hex（16进制）或Base64表示的字符串，默认UTF-8编码
     *
     * @param encryptedText 被解密的String
     * @return 解密后的String
     */
    public String decryptStr(String encryptedText) {
        return this.aes.decryptStr(encryptedText);
    }

    /**
     * 解密Hex（16进制）或Base64表示的字符串
     *
     * @param encryptedText 被解密的String，必须为16进制字符串或Base64表示形式
     * @return 解密后的bytes
     */
    public byte[] decrypt(String encryptedText) {
        return this.aes.decrypt(encryptedText);
    }
}
